package main

import "fmt"

// 声明一个接口
type Usb interface {
	Start()

	Stop()
}

type Phone struct {
}

func (p Phone) Start() {
	fmt.Printf("手机开始工作...")
}

func (p Phone) Stop() {
	fmt.Println("手机停止工作，，，")
}

type Camera struct {
}

func (p Camera) Start() {
	fmt.Printf("相机开始工作...")
}

func (p Camera) Stop() {
	fmt.Println("相机停止工作，，，")
}

type Computer struct {
}

func (p Computer) Start() {
	fmt.Printf("计算机开始工作...")
}

func (p Computer) Stop() {
	fmt.Println("计算机停止工作，，，")
}

type Hello struct {
}

func (h Hello) Stop() {
	fmt.Println("implement me....")
}

func (h Hello) Start() {
	fmt.Println("em....")
}

// 接收一个Usb接口类型变量，只要是实现了Usb接口，
// 所谓实现，就是指实现了Usb接口所有声明方法
func (c Computer) Working(usb Usb) {
	usb.Start()
	usb.Stop()
}

func main() {
	computer := Computer{}
	phone := Phone{}
	camera := Camera{}
	hello := Hello{}

	computer.Working(phone)
	computer.Working(camera)
	computer.Working(hello)

	computer.Working(new(Phone))
}
